package dletc.thread;
/**
 * Thread类中常用方法：
 * 
 * 五、唤醒休眠方法：对象.interrupt();
 * 
 * 原理：强制让sleep()方法产生异常，被catch语句抓取异常，跳过try语句中sleep()方法，从而达到避免sleep方法运行的效果。
 *
 */
public class Demo05 {

	public static void main(String[] args) {
		
		for (int i = 0; i < 10; i++) {	
			//唤醒休眠  
			Thread.currentThread().interrupt();
			try {
				//休眠2秒  输出语句在休眠前 先输出语句在休眠，在后，先休眠在输出。
				Thread.sleep(2000);
			} catch (InterruptedException e) {
				//需要屏蔽异常信息，因为是故意出异常被抓取，程序没问题，所以不用打印异常信息。
				//e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + "--------" + i);
		}
		
		MyThread5 mt5 = new MyThread5();
		
		mt5.start();
		
		//5秒后 强制唤醒
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		mt5.interrupt(); //强制唤醒 
		

	}

}

class MyThread5 extends Thread{
	@Override
	public void run() {
			System.out.println(Thread.currentThread().getName() + "--------" +  "start");
			try {
				Thread.sleep(1000 * 60 * 60 * 24 * 365 );
			} catch (InterruptedException e) {
				//需要屏蔽异常信息，因为是故意出异常被抓取，程序没问题，所以不用打印异常信息。
				//e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName() + "--------" + "end" );
		
	}
}
